<?php

/**
 * 
 *
 * @package Application_Model
 * @subpackage Model
 * @author markos
 */
class Application_Model_MaquinaVirtual extends Application_Model_ModelAbstract {

    /**
     * PK
     * Database var type int(10) unsigned
     *
     * @var int
     */
    protected $_CodigoMaquinaVirtual;

    /**
     * Database var type int(10) unsigned
     *
     * @var int
     */
    protected $_CodigoLaboratorio;

    /**
     * Nombre asignado al crear la máquina
     * Database var type varchar(45)
     *
     * @var string
     */
    protected $_Nombre;

    /**
     * Identificador para uso del administrador (siempre almacenar en mayúsculas). Debe ser único.
     * Database var type varchar(50)
     *
     * @var string
     */
    protected $_Identificador;

    /**
     * Dominio del hypervisor
     * Database var type varchar(255)
     *
     * @var string
     */
    protected $_Dominio;

    /**
     * URL para acceso via hypervisor
     * Database var type varchar(500)
     *
     * @var string
     */
    protected $_Url;

    /**
     * Esto tiene que ser un enum de los dias de la semana
     * Database var type enum('Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado')
     *
     * @var string
     */
    protected $_DiasEncendido;

    /**
     * Flag que permite encender fuera de horario de clases
     * Database var type tinyint(1)
     *
     * @var boolean
     */
    protected $_PermiteFueraHorario;

    /**
     * Indicador de estado para monitoreo
     * Database var type tinyint(1)
     *
     * @var boolean
     */
    protected $_Encendido;

    /**
     * Hora de inicio de utilizacion diaria
     * Database var type time(1)
     *
     * @var string
     */
    protected $_HoraInicioDia;

    /**
     * Hora de fin de utilizacion diaria
     * Database var type time(1)
     *
     * @var string
     */
    protected $_HoraFinDia;

    /**
     * Cantidad de horas de utilizacion diaria
     * Database var type int
     *
     * @var int
     */
    protected $_CantidadHorasDia;

    /**
     * Cantidad de horas de utilizacion permitidas total del curso
     * Database var type int
     *
     * @var int
     */
    protected $_CantidadHorasTotal;

    /**
     * Registra la ultima vez que se apago la maquina
     * Database var type timestamp
     *
     * @var string
     */
    protected $_UltimoApagado;

    /**
     * Parent relation maquina_virtual_ibfk_1
     *
     * @var Application_Model_Laboratorio
     */
    protected $_Laboratorio;

    /**
     * Dependent relation fk_maquina_virtual_has_usuario_maquina_virtual1
     * Type: One-to-Many relationship
     *
     * @var Application_Model_MaquinaVirtualUsuario
     */
    protected $_MaquinaVirtualUsuario;

    /**
     * Sets up column and relationship lists
     */
    public function __construct() {
        parent::init();
        $this->setColumnsList(array(
            'codigo_maquina_virtual' => 'CodigoMaquinaVirtual',
            'codigo_laboratorio' => 'CodigoLaboratorio',
            'nombre' => 'Nombre',
            'identificador' => 'Identificador',
            'dominio' => 'Dominio',
            'url' => 'Url',
            'dias_encendido' => 'DiasEncendido',
            'horas_encendido' => 'HorasEncendido',
            'permite_fuera_horario' => 'PermiteFueraHorario',
            'encendido' => 'Encendido',
            'ultimo_apagado' => 'UltimoApagado',
            'hora_inicio_dia' => 'HoraInicioDia',
            'hora_fin_dia' => 'HoraFinDia',
            'horas_utilizacion_diario' => 'CantidadHorasDia',
            'horas_utilizacion_total' => 'CantidadHorasTotal',
        ));

        $this->setParentList(array(
            'MaquinaVirtualIbfk1' => array(
                'property' => 'Laboratorio',
                'table_name' => 'Laboratorio',
            ),
        ));

        $this->setDependentList(array(
            'FkMaquinaVirtualHasUsuarioMaquinaVirtual1' => array(
                'property' => 'MaquinaVirtualUsuario',
                'table_name' => 'MaquinaVirtualUsuario',
            ),
        ));
    }

    /**
     * Sets column codigo_maquina_virtual
     *
     * @param int $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setCodigoMaquinaVirtual($data) {
        $this->_CodigoMaquinaVirtual = $data;
        return $this;
    }

    /**
     * Gets column codigo_maquina_virtual
     *
     * @return int
     */
    public function getCodigoMaquinaVirtual() {
        return $this->_CodigoMaquinaVirtual;
    }

    /**
     * Sets column codigo_laboratorio
     *
     * @param int $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setCodigoLaboratorio($data) {
        $this->_CodigoLaboratorio = $data;
        return $this;
    }

    /**
     * Gets column codigo_laboratorio
     *
     * @return int
     */
    public function getCodigoLaboratorio() {
        return $this->_CodigoLaboratorio;
    }

    /**
     * Sets column nombre
     *
     * @param string $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setNombre($data) {
        $this->_Nombre = $data;
        return $this;
    }

    /**
     * Gets column nombre
     *
     * @return string
     */
    public function getNombre() {
        return $this->_Nombre;
    }

    /**
     * Sets column identificador
     *
     * @param string $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setIdentificador($data) {
        $this->_Identificador = $data;
        return $this;
    }

    /**
     * Gets column identificador
     *
     * @return string
     */
    public function getIdentificador() {
        return $this->_Identificador;
    }

    /**
     * Sets column dominio
     *
     * @param string $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setDominio($data) {
        $this->_Dominio = $data;
        return $this;
    }

    /**
     * Gets column dominio
     *
     * @return string
     */
    public function getDominio() {
        return $this->_Dominio;
    }

    /**
     * Sets column url
     *
     * @param string $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setUrl($data) {
        $this->_Url = $data;
        return $this;
    }

    /**
     * Gets column url
     *
     * @return string
     */
    public function getUrl() {
        return $this->_Url;
    }

    /**
     * Sets column dias_encendido
     *
     * @param string $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setDiasEncendido($data) {
        $this->_DiasEncendido = $data;
        return $this;
    }

    /**
     * Gets column dias_encendido
     *
     * @return string
     */
    public function getDiasEncendido() {
        return $this->_DiasEncendido;
    }

    /**
     * Sets column horas_encendido
     *
     * @param int $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setHorasEncendido($data) {
        $this->_HorasEncendido = $data;
        return $this;
    }

    /**
     * Gets column horas_encendido
     *
     * @return int
     */
    public function getHorasEncendido() {
        return $this->_HorasEncendido;
    }

    /**
     * Sets column permite_fuera_horario
     *
     * @param boolean $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setPermiteFueraHorario($data) {
        $this->_PermiteFueraHorario = $data;
        return $this;
    }

    /**
     * Gets column permite_fuera_horario
     *
     * @return boolean
     */
    public function getPermiteFueraHorario() {
        return $this->_PermiteFueraHorario ? true : false;
    }

    /**
     * Sets column encendido
     *
     * @param boolean $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setEncendido($data) {
        $this->_Encendido = $data;
        return $this;
    }

    /**
     * Gets column encendido
     *
     * @return boolean
     */
    public function getEncendido() {
        return $this->_Encendido ? true : false;
    }

    /**
     * Sets column ultimo_apagado
     *
     * @param string $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setUltimoApagado($data) {
        $this->_UltimoApagado = $data;
        return $this;
    }

    /**
     * Gets column ultimo_apagado
     *
     * @return string
     */
    public function getUltimoApagado() {
        return $this->_UltimoApagado;
    }
    public function getHoraInicioDia() {
        return $this->_HoraInicioDia;
    }

    public function setHoraInicioDia($data) {
        $this->_HoraInicioDia = $_HoraInicioDia;
    }

    public function getHoraFinDia() {
        return $this->_HoraFinDia;
    }

    public function setHoraFinDia($data) {
        $this->_HoraFinDia = $_HoraFinDia;
    }

    public function getCantidadHorasDia() {
        return $this->_CantidadHorasDia;
    }

    public function setCantidadHorasDia($data) {
        $this->_CantidadHorasDia = $_CantidadHorasDia;
    }

    public function getCantidadHorasTotal() {
        return $this->_CantidadHorasTotal;
    }

    public function setCantidadHorasTotal($data) {
        $this->_CantidadHorasTotal = $_CantidadHorasTotal;
    }

        /**
     * Sets parent relation CodigoLaboratorio
     *
     * @param Application_Model_Laboratorio $data
     * @return Application_Model_MaquinaVirtual
     */
    public function setLaboratorio(Application_Model_Laboratorio $data) {
        $this->_Laboratorio = $data;

        $primary_key = $data->getPrimaryKey();
        if (is_array($primary_key)) {
            $primary_key = $primary_key['codigo_laboratorio'];
        }

        $this->setCodigoLaboratorio($primary_key);

        return $this;
    }

    /**
     * Gets parent CodigoLaboratorio
     *
     * @param boolean $load Load the object if it is not already
     * @return Application_Model_Laboratorio
     */
    public function getLaboratorio($load = true) {
        if ($this->_Laboratorio === null && $load) {
            $this->getMapper()->loadRelated('MaquinaVirtualIbfk1', $this);
        }

        return $this->_Laboratorio;
    }

    /**
     * Sets dependent relations fk_maquina_virtual_has_usuario_maquina_virtual1
     *
     * @param array $data An array of Application_Model_MaquinaVirtualUsuario
     * @return Application_Model_MaquinaVirtual
     */
    public function setMaquinaVirtualUsuario(array $data) {
        $this->_MaquinaVirtualUsuario = array();

        foreach ($data as $object) {
            $this->addMaquinaVirtualUsuario($object);
        }

        return $this;
    }

    /**
     * Sets dependent relations fk_maquina_virtual_has_usuario_maquina_virtual1
     *
     * @param Application_Model_MaquinaVirtualUsuario $data
     * @return Application_Model_MaquinaVirtual
     */
    public function addMaquinaVirtualUsuario(Application_Model_MaquinaVirtualUsuario $data) {
        $this->_MaquinaVirtualUsuario[] = $data;
        return $this;
    }

    /**
     * Gets dependent fk_maquina_virtual_has_usuario_maquina_virtual1
     *
     * @param boolean $load Load the object if it is not already
     * @return array The array of Application_Model_MaquinaVirtualUsuario
     */
    public function getMaquinaVirtualUsuario($load = true) {
        if ($this->_MaquinaVirtualUsuario === null && $load) {
            $this->getMapper()->loadRelated('FkMaquinaVirtualHasUsuarioMaquinaVirtual1', $this);
        }

        return $this->_MaquinaVirtualUsuario;
    }

    /**
     * Returns the mapper class for this model
     *
     * @return Application_Model_Mapper_MaquinaVirtual
     */
    public function getMapper() {
        if ($this->_mapper === null) {
            $this->setMapper(new Application_Model_Mapper_MaquinaVirtual());
        }

        return $this->_mapper;
    }

    /**
     * Deletes current row by deleting the row that matches the primary key
     *
     * @see Application_Model_Mapper_MaquinaVirtual::delete
     * @return int|boolean Number of rows deleted or boolean if doing soft delete
     */
    public function deleteRowByPrimaryKey() {
        if ($this->getCodigoMaquinaVirtual() === null) {
            throw new Exception('Primary Key does not contain a value');
        }

        return $this->getMapper()
                        ->getDbTable()
                        ->delete('codigo_maquina_virtual = ' .
                                $this->getMapper()
                                ->getDbTable()
                                ->getAdapter()
                                ->quote($this->getCodigoMaquinaVirtual()));
    }

}
